namespace Xmef.Engine.Internal
{
    using System.Collections.Generic;
    using Xmef.Interfaces;

    internal interface IPluginHostInternal : IPluginHost, IPluginActivator, IPluginCollectionContainer, IPluginEnumerator, IPluginIdentity
    {
        void Clear();
        IPluginContextInternal GetConfigurationContext(IXmlPluginConfiguration configuration);
        IPluginObjectCollection<T> Load<T>(IXmlPluginConfiguration pluginConfiguration);
        IPluginContextInternal LoadContext(IXmlPluginConfiguration pluginConfiguration);
        IPluginObjectCollection<T> LoadPlugin<T>(IPluginContextInternal context);
        void RegisterPlugin(IPluginObject plugin);
        void Unload(IPluginObject plugin);
        IPluginObjectCollection<T> Unload<T>(IXmlPluginConfiguration pluginConfiguration);
        IPluginContextInternal UnloadContext(IXmlPluginConfiguration configuration);
        IPluginObjectCollection<T> UnloadPlugin<T>(IPluginContextInternal context);
        void UnloadPlugin(IPluginObjectInternal plugin);
        void UnregisterPlugin(IPluginObject plugin);

        IEnumerable<IPluginObjectInternal> InternalPlugins { get; }
    }
}

